2.20~2.24README
클래스는 값이면서 타입이다.
class Person{
name;
age;
married
constructer (name : string , age:number , married :boolean){
this.name = name
this.age = age
this.married = married
}
}
- 자바스크립트와 다르게 클래스 내부에 넣어야한다.
- 생성자 내부에 할당 없이 맴버로만 선언하면 생성자 안에서 애러가 발생한다.
- 조금 더 엄격한 타입검사를 위해
implents를 사용할 수 있다. - 클래스 맴버로는
public,protected,private가 올 수 있따. abstract를 사용하면 마찬가지로interface처럼 타입검사를 사용할 수 있다.
public : 상속과 new로 만든 인스턴스에서 속성사용이 가능하다
private : 자신의 클래스에서만 속성 사용이 가능하다
protected : 자신의 클래스와 자손에서 속서 사용이 가능하다
enum은 자바스크립트에서도 사용할 수 있다.
enum은 열거형이다.
enum {
NOVICE,
INTERMEDIATE,
ADVACNED,
MASTER
}
- 내부에 존재하는 이름을
맴버라고 부른다. - 문자열이나 정술르 할당할 수 있다.
- 타입의 속성은 값으로 활용이 가능하다.
- 보통 타입으로 많이 사용하며 타입으로 사용시 유니언과 비슷한 역활을 한다
enum타입은 브랜딩을 위해 많이 사용한다. 다만 이 때 같은 맴버끼리 비교해야 의미가 있음을 기억하자
infer로 타입스크립트 추론을 활용하자
-
infer 예약어는 타입스크립트의 타입 추론 기능을 극한까지 활용하는 기능입니다. 컨디셔널 타입과 함께 사용합니다.
-
다음과 같은 상황에서 infer를 활용할 수 있습니다. 배열이 있을 때 배열의 요소 타입을 얻어내고 싶은 상황입니다.
type El<T> = T extends (infer E)[] ? E : never;
type Str = El<string[]>;
// type Str = string
type NumOrBool = El<(number | boolean)[]>;
// type NumOrBool = number | boolean
type El<T> = T extends (infer E)[] ? never : E;
// Cannot find name 'E'.
-
타입스크립트에 추론을 맡기고 싶은 부분을 'infer 타입_변수'로 표시하면 됩니다. 예제에서는 E가
타입 변수(type variable)입니다. -
다만 컨디셔널 타입에서 타입 변수는 참 부분에서만 쓸 수 있습니다. 다음과 같이 거짓 부분에서 쓰려고 하면 에러가 발생합니다.
타입을 좁혀 정확한 타입을 얻어내자
if (param == undefined) {
param;
} else if (param == null) {
param;
}
- 타입을 좁혀 추론하는것을
제어 흐름 분석이라 칭한다 - 타입 좁히기에 꼭
typeof를 사용할 필요가 없다. boolean으로true | false구분이 사용 가능하다.class나함수의 경우instanceof로 구분할 수 있다.- 타입 좁히기는 자바스크립트 문법을 사용해서 진행해야 한다.
- 다만 객체의 경우는 오류가 발생하는데 이 경우
in을 사용할 수 있다.
if (width in param) {
}